<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

require_once(INCLUDES_DIR.'auth.class.php');

/*!
 * @page AnswerPagePage Исходный код класса AnswerPage
 * @include answer_page.class.php
 */

/*! @addtogroup ClassWebFormsQA Основные классы проекта
 *  Группа включает основные классы используемые в проекте WebFormsQA
 *  @{
 */

/**
 * @class AnswerPage 
 * @brief страница для формирования ответа на вопрос пользователя \n
 * @ref AnswerPagePage
 */
class AnswerPage extends Page {

    /**
     *  конструктор.
     *  @param object &$smarty_obj   - ссылка на обьект шаблона
     *  @param array  $attr          - массив атрибутов в формате attr["name"] = name_type;
     *  @param string $name_template - название шаблона
     */
    function QuestionPage(&$smarty_obj, $attr, $name_template)
    {
        parent::Page(&$smarty_obj, $attr, $name_template);
    }

    /** @brief обновить данные страницы
     *
     * 		   Состояния страницы:
     * - 1  - Авторизация не прошла (стр. EntrancePage),  или пользователь не зарегистрирован или у него нет административного доступа
     * - 3  - Успешная авторизаци
     * - 4  - Изменен диапазон навигатора.
     * - 5  - Вопрос задан в неправильной категории по мнению администратора,
     *        перенос вопроса в другую категорию.
     * - 6  - Администратор выбирает вопрос, на который он хочет ответить
     * - 7  - Нет ни одного нового вопроса
     * - 8  - Вопрос или вопросы были удалены
     * - 9  - Добавлен ответ на вопрос
     * - 10 - Пользователю направлено письмо, в случае наличия email адреса
     * - 11 - При переносе вопроса в другую категорию пользователь не отметил ни один вопрос
     * - 12 - При переносе вопроса в другую категорию пользователь не выбрал новую категорию
     * - 13 - При удалении не выбран ни один вопрос
     * 
     * @return bool результат операции
     */
    function update()
    {
        // обновляем атрибуты страницы и их значени
        // и главный шаблон Smarty
        if( $flag_result = parent::update() ) {

            $base   = &$GLOBALS['base'];
            $nav    = new Navigation($base);



            // начальное состояние берется из главного шаблона
            $state      		= 1;
            $num_find           = 0;
            $offset             = 0;
            $categoryID         = 0;
            $questionID         = 0;
            $navigator          = '';
            $list_new_questions = array();
            // дерево категорий
            $categories_tree    = array();
            
            $flag_admin = false;
            if( AuthCommon::checkAuthUser($flag_admin) && $flag_admin ) {
            	$state = 3;

            	if( AuthCommon::getAttrCategoryIDandSession($this, $categoryID) ) {
					$list_questions = array();
            	}
            	
            }
            
            if ($state == 3) {
                // выбираем вопросы без ответов
                if ($num_find = $base->getAllQuestionsAnswerOrNot(false, $list_new_questions)) {

                    $flag_update = false;

                    if ($this->attr['offset']['set']) {
                        $offset = $this->attr['offset']['value'];

                    }
                    $request        = "index.php?answer_page=&categoryID=$categoryID&";

                    // пользователь хочет изменить категорию вопроса или вопросов
                    if ($this->attr['change']['set']) {
                    	$state = 11;
                        // ищем выбранные вопросы
                        $idx = $this->getVariablesFromQuerry('ch', 'integer');
                        if (sizeof($idx)) {
                        	$state = 12;
                        	if( $categoryID ) {    	
	                            $base->changeCategory($categoryID, $idx);
	                            $flag_update = true;
	                            $state = 5;
                        	}
                        }
                    }

                    if ($this->attr['delete']['set']) {
                        // удаляем выбранные вопросы
                        $idx = $this->getVariablesFromQuerry('ch', 'integer');
                        $state = 13;
                        if( sizeof($idx) ) {
                        	$base->delQuestions(TYPE_DELETE, $idx);
                        	$flag_update = true;
                        	$state = 8;
                        }
                    }

                    if ($this->attr['questionID']['set'] && $this->attr['questionID']['value']) {
                        // выбран вопрос, для ответа
                        $questionID = $this->attr['questionID']['value'];
                        $state = 6;

                        if ($this->attr['but_answer']['set'] && $this->attr['answer']['set'] && $this->attr['answer']['value']) {
                            // нажали кнопку ответить на вопрос и есть строка с ответом
                            if ($answer = trim($this->attr['answer']['value'])) {
                                $state  = 9;
                                $base->addAnswer($questionID, $answer);

                                // пробуем послать email
                                $size = sizeof($list_new_questions);
                                for ($i = 0; $i < $size; $i++ ) {
                                    if ($questionID == $list_new_questions[$i][0] && $list_new_questions[$i][6]) {
                                        $state  = 10;
                                        // есть почтовый адрес [6]
                                        $subject = STRING_ANSWER_QUESTION." - ".$list_new_questions[$i][2];
                                        mail($list_new_questions[$i][6], $subject, $answer);
                                        break;
                                    }
                                }

                                $flag_update = true;
                            }
                        }
                    }

                    if ($flag_update) {
                        // список вопросов изменился удалили или изменили категорию
                        $num_find = $base->getAllQuestionsAnswerOrNot(false, $list_new_questions);
                    }

                    // определяем строку навигатора
                    if ($nav->getNavigator($num_find, $offset, COUNT_QUESTIONS_PER_PAGE, $request, $navigator)) {
                        // изменен диапазон навигатора
                        // формируем диапазон вопросов для отображения, а не весь список
                        $list_new_questions = &$nav->selectRange($offset, $offset + COUNT_QUESTIONS_PER_PAGE,
                                                                 $list_new_questions, $num_find, $list_out);
                    }


                } else {
                    $state = 7;
                }

                // получаем дерево категорий
                $nav->getTreeCategories($categoryID, CATEGORIES_TABLE, $categories_tree);

            }

            // текущая выбранная вкладка
            $this->Smarty->assign('current_tabs', ID_PAGE_ANSWER);
            $this->Smarty->assign('state', $state);
            // количество найденных вопросов
            $this->Smarty->assign('num_find', $num_find);
            // строка навигатора
            $this->Smarty->assign('navigator', $navigator);
            $this->Smarty->assign('offset', $offset);

            reset($this->attr);
            // строка с главным параметром перехода на страницу - первый ключ в списке конструктора MainPage
            $this->Smarty->assign('code_page', "index.php?offset=$offset&".key($this->attr));
            $this->Smarty->assign('categoryID', $categoryID);
            $this->Smarty->assign('questionID', $questionID);

            $this->Smarty->assign('categories_tree', $categories_tree);
            $this->Smarty->assign('list_new_questions', $list_new_questions);
        }
        
         return $flag_result; 

    } // end update()

}  // finish class AnswerPage

/*! @} */

?>

